package com.geeguo.ebuilder.core.common.utils;

import org.apache.commons.lang3.StringUtils;

public class StringHelper {

	/**
	 * StringUtils.hasLength(null) = false
	 * StringUtils.hasLength("") = false
	 * StringUtils.hasLength(" ") = true
	 * StringUtils.hasLength("Hello") = true
	 */
	public static boolean hasLength(CharSequence str) {
		return (str != null && str.length() > 0);
	}

	public static boolean hasText(String str) {
		return hasText((CharSequence) str);
	}

	public static boolean hasText(CharSequence str) {
		if (!hasLength(str)) {
			return false;
		}
		int strLen = str.length();
		for (int i = 0; i < strLen; i++) {
			if (!Character.isWhitespace(str.charAt(i))) {
				return true;
			}
		}
		return false;
	}

	/**
	 * 数字左边补齐0，使之达到指定长度。注意，如果数字转换为字符串后，长度大于size，则只保留 最后size个字符。
	 *
	 * @param num 数字对象
	 * @param size 字符串指定长度
	 * @return 返回数字的字符串格式，该字符串为指定长度。
	 */
	public static final String padl(final Number num, final int size) {
		return padl(num.toString(), size, '0');
	}

	/**
	 * 字符串左补齐。如果原始字符串s长度大于size，则只保留最后size个字符。
	 *
	 * @param s 原始字符串
	 * @param size 字符串指定长度
	 * @param c 用于补齐的字符
	 * @return 返回指定长度的字符串，由原字符串左补齐或截取得到。
	 */
	public static final String padl(final String s, final int size, final char c) {
		final StringBuilder sb = new StringBuilder(size);
		if (s != null) {
			final int len = s.length();
			if (s.length() <= size) {
				for (int i = size - len; i > 0; i--) {
					sb.append(c);
				}
				sb.append(s);
			} else {
				return s.substring(len - size, len);
			}
		} else {
			for (int i = size; i > 0; i--) {
				sb.append(c);
			}
		}
		return sb.toString();
	}

	/**
	 * 是否包含字符串
	 *
	 * @param str 验证字符串
	 * @param strs 字符串组
	 * @return 包含返回true
	 */
	public static boolean inStringIgnoreCase(String str, String... strs) {
		if (str != null && strs != null) {
			for (String s : strs) {
				if (str.equalsIgnoreCase(StringUtils.trim(s))) {
					return true;
				}
			}
		}
		return false;
	}

	public static boolean isDigit(String str) {
		boolean result = true;
		if (str != null && !str.trim().isEmpty()) {
			int len = str.length();
			for (int i = 0; i < len; i++) {
				if (!Character.isDigit(str.charAt(i))) {
					result = false;
					break;
				}
			}
		} else {
			result = false;
		}
		return result;
	}

	public static boolean isDouble(String val) {
		boolean result = true;
		if (val != null && !val.isEmpty()) {
			int l = val.length();
			for (int i = 0; i < l; i++) {
				if (!Character.isDigit(val.codePointAt(i)) && !('.'==val.charAt(i))) {
					result =false;
					break;
				}
			}
		} else {
			result =false;
		}
		return result;
	}
}